package com.java3_1;


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

class CallableFinish implements Callable{
    @Override
    public Object call() throws Exception {
        System.out.println("this is a test !");
        return null;
    }
}
public class java3_1 {
    //两种创建线程的方式
    //继承
//    public static void main(String[] args) {
////        MyThread myThread = new MyThread();
////        myThread.setName("线程1");
////        myThread.start();
////        MyThread1 myThread1 = new MyThread1();
////        Thread thread = new Thread(myThread1, "线程2");
////        thread.start();
//
//        //使用匿名内部类创建对象
////        new Thread(){
////            @Override
////            public void run() {
////                System.out.println("完成使用匿名内部类创建线程");
////            }
////        }.start();
//
//
////        new Thread(new Runnable() {
////            @Override
////            public void run() {
////                System.out.println("完成使用匿名内部类创建线程");
////            }
////        }).start();
//
//
////
////    }
//
//    static Demo2 demo2_1 = null;
//    static Demo2 demo2_2 = null;
//    static Demo2 demo2_3 = null;
//
//    public static void main(String[] args) {
//
////        MyThread2 myThread2 = new MyThread2();
////        myThread2.start();
//
//
//        Thread thread1 = new Thread() {
//            @Override
//            public void run() {
//                demo2_1 = Demo2.getDemo2();
//            }
//        };
//        Thread thread2 = new Thread() {
//            @Override
//            public void run() {
//                demo2_2 = Demo2.getDemo2();
//            }
//        };
//        Thread thread3 = new Thread() {
//            @Override
//            public void run() {
//                demo2_3 = Demo2.getDemo2();
//            }
//        };
//        thread1.start();
//        thread2.start();
//        thread3.start();
//
//        try {
//            thread1.join();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        try {
//            thread2.join();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        try {
//            thread3.join();
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//
//        System.out.println(demo2_1);
//        System.out.println(demo2_2);
//        System.out.println(demo2_3);
    //就会出现线程安全问题
    //        com.java3_1.Demo2@404b9385
//        com.java3_1.Demo2@6d311334
//        com.java3_1.Demo2@682a0b20
//    public static void main(String[] args) {
//        //由于只创建了一个对象
//        Clerk clerk = new Clerk(0);
//        Customer customer = new Customer(clerk);
//        Productor productor = new Productor(clerk);
//
//
//        customer.start();
//        productor.start();
//
//
//
//    }
    public static void main(String[] args) {
        CallableFinish callableFinish = new CallableFinish();
        FutureTask futureTask = new FutureTask(callableFinish);
        Thread thread = new Thread(futureTask);
        thread.start();

        try {
            Object o = futureTask.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }

    }


}
